package com.hqd.ch03.v21.aop;

import java.lang.reflect.Method;

public interface MethodMatcher {
    MethodMatcher TRUE = TrueMethodMatcher.INSTANCE;

    /**
     * 不需方法参数匹配
     *
     * @param method
     * @param targetClass
     * @return
     */
    boolean matches(Method method, Class<?> targetClass);

    /**
     * 是否运行时
     * 这个涉及到动态匹配
     * 有些需要根据参数值进行动态匹配，这时候isRuntime返回 true
     *
     * @return
     */
    boolean isRuntime();

    /**
     * 更细致的匹配，包含参数
     *
     * @param method
     * @param targetClass
     * @param args
     * @return
     */
    boolean matches(Method method, Class<?> targetClass, Object... args);
}
